<!DOCTYPE html>
<html lang="zh-CN">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
    ！注意写上题目题数
    例如 ：
    1、选择题
        (1)D
        (2)C
        (3)true,false,false
        (4)A
        (5)A
        ...
    2、填空题
        第一题
        (1)在dom操作中获取节点方法：
            document.querySelector()
            document.querySelectorAll()
            document.getElementById() 
            documnet.getElementsByClassName()
            document.getElementsByTagName()
        (2)创建节点方法
            createElement()
            creatTextNode（）
        （3）添加节点方法
            cloneNode（）
        （4）dom的其他操作方法
            查找节点：
                child.parentNode(返回父节点)
                child.parentElement(返回父元素节点)
                Node.childNodes(返回包含子节点文本集合)
                Node.children(返回元素节点的集合)
            删除节点
                node.remove(删除节点) 
                node.removeChild(子节点)
            修改节点
                node.appendchild()
                node.append()
                node.insertBefore()
            文档碎片：
                createDocumentFragment （创建文档碎片）
            设置元素属性：
                setAttribute(name,value) 
                getAttribute（属性名）
                removeAttribute(属性名)
            样式API
                style
                window.getComuptedStyle(元素, 元素属性)
        
        
        第二题
        (1) Object.prototype

        (2) Function.prototype
        (3) Function.prototype.__proto__

        (4) Array.prototype
        (5) Array.prototype.__proto__

        (6)Function.prototype
        (7)Function.prototype
        (8)Function.prototype

        (9)Boolean.prototype

        (10)Object.__proto__.__proto__



    3、填空题
            
     第 1 题
        ajax全称是异步的JavaScript和xml，作用是可以在不需要刷新整个页面情况下，更新部分网页的技术，在淘宝和京东等各种网站普遍使用。
    
     第 2 题
     this的指向是谁调用它，它就指向谁。 this没有属性。this的原型属性是constructor。

     第 3 题
    简称是事件循环，js调控下同步和异步任务的机制成为事件循环。

    第 4 题
    （1）原型(对象属性) 我们创建的每个函数都有一个原型对象(prototype属性)，这个对象包含可共享的属性和方法。
    （2）原型链，实例对象(proto)与原型(prototype)之间的连接, 叫原型链
    js在创建对象的时候, 都有内置属性proto, 用于指向构造函数的原型对象(prototype)


    4.逻辑题
        第 1 题
            Hello+Jack

        第 2 题
           10

        第 3 题
            21

        第 4 题
            alert（667）

        第 5 题
            Hy

        第 6 题

        第 7 题

    5.实操题
        第 1 题
        es6：
        class 函数名 {
            construstor (参数)
        }

        第 2 题
        function ajax(_url, _data, _method) {
            // GET请求为默认请求
            let method = _method || "GET";
            // GET请求就直接默认是null
            let data = _data || null;
            // 返回Prmoise对象
            return new Promise((resolve, reject) => {
                // 实例化一个XMLHttpRequest对象
                let xhr = new XMLHttpRequest();

                if (method.toUpperCase() == "GET") {
                    let str = "?";
                    // 处理get请求的参数
                    for (let k in data) {
                        str += `${k}=${data[k]}&`;
                    };
                    str = str.slice(0, -1);
                    xhr.open(method, _url + str);
                } else {
                    xhr.open(method, _url);
                }
                // 设置默认请求头
                // 设置请求头格式为json格式
                xhr.setRequestHeader("Content-Type", "application/json");
                xhr.send(JSON.stringify(data));

                xhr.addEventListener("readystatechange", () => {
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200) {
                            // 返回解析成功结果
                            resolve(JSON.parse(xhr.responseText));
                        } else {
                            // 拒绝
                            reject(JSON.parse(xhr.responseText));
                        }
                    }
                })
            })
        };
        


        第 3 题
        // let arr = [1, 2, 5, 2, 4, 5, 10, 2, 5, 1, 2, 4, 5, 8, 6, 4];

        // 方法1
        // let newArr = [];
        // for (let i = 0;i<arr.length;i++) {
        //     if (newArr.indexOf(arr[i])==-1)
        //     newArr.push(arr[i])
        // }
        // console.log(newArr);

        // 方法2
        // let newArr = new Set(arr)
        // console.log(newArr);

        //方法3
        // let newArr = [...new Set(arr)]
        // console.log(newArr);

        //方法4
        // for(let i=0; i<arr.length; i++){
        //     for(let j=i+1; j<arr.length; j++){
        //         if(arr[i]==arr[j]){         
        //             arr.splice(j,1);
        //             j--;
        //         }
        //     }
        // }
        // console.log(arr); 
    -->

</body>
</html>